import { getRepository, Like,MoreThanOrEqual } from "typeorm";
import { Reader } from "../entity/Reader";

class ReaderServer {

  // 添加读者
  async addReader(readerData:Reader) {
    const readerRepository = getRepository(Reader);
    const reader = readerRepository.create(readerData)
    return readerRepository.save(reader);
  }

  // 修改读者
  async updateReader(id: number, reader: Reader) {
    const readerRepository = getRepository(Reader);
    return readerRepository.update(id, reader);
  }

  // 根据 id 删除读者
  async deleteReader(id: number) {
    const readerRepository = getRepository(Reader);
    return readerRepository.delete(id);
  }

  // 查找所有读者
  async findAllReader() {
    const readerRepository = getRepository(Reader);
    return readerRepository.find()
  }

  // 根据读者 id 查找
  async findById(id:number) {
    const readerRepository = getRepository(Reader);
    return readerRepository.findOne(id)
  }

  // 根据读者姓名查找
  async findByName(readername:string) {
    const readerRepository = getRepository(Reader);
    return readerRepository.findOne({
      where: {
        readername
      }
    })
  }

  // 根据用户名查找读者，可以寻找到多个相同读者名的读者，以数组的形式返回
  async findsByName(readername: string) {
    const userRepository = getRepository(Reader);
    return userRepository.find({
      where: {
        readername
      }
    })
  }

  // 根据读者姓名关键词查找（模糊匹配）
  async findByKeyWord(key: string) {
    const readerRepository = getRepository(Reader);
    return readerRepository.find({
      where: {
        readername: Like(`%${key}%`)
      }
    })
  }

  // 根据最大可借数 大于等于num 查找读者
  async findByMaxNum(num:number) {
    const readerRepository = getRepository(Reader);
    return readerRepository.find({
      max_num: MoreThanOrEqual(num),
    })
  }

  // 根据最大可借天数 大于等于num 查找读者
  async findByMaxDay(num:number) {
    const readerRepository = getRepository(Reader);
    return readerRepository.find({
      days_num: MoreThanOrEqual(num),
    })
  }
}

export default new ReaderServer()